/*
04-树4 是否同一棵二叉搜索树
*/
/*
方法：
3 1 4 2 构造的Tree
判断3 2 4 1是否一致
在树T中按顺序搜索序列3 2 4 1中的每个数
1）如果每次搜索所经过的节点在前面均出现过，则一致
2）否则（某次搜索中遇到前面未出现过的节点），不一致
*/
#include <stdio.h>
#include <stdlib.h>

typedef struct TreeNode *Tree;
typedef struct TreeNode TreeNode;
struct TreeNode {
    int data;
    TreeNode* left;
    TreeNode* right;
    int flag; // 0-未出现过，1-出现过
};

Tree createTree(int n);
void preorderTraversal(TreeNode* root);
void resetTree(TreeNode* root);
void freeTree(TreeNode* root);
int judge(TreeNode* root, int n);

int main() {
    int N, L;

    for (;;) {
        scanf("%d", &N);
        if (N == 0){
            break;
        }
        scanf("%d", &L);

        TreeNode* root = createTree(N);
        // preorderTraversal(root);
        // printf("\n");

        for(int i=0; i<L; i++){
            if (judge(root, N))
                printf("Yes\n");
            else
                printf("No\n");
            resetTree(root);  // 清除Tree中的flag
        }

        freeTree(root);
    }
    
    return 0;
}

Tree insertTree(TreeNode* root, int x) {
    if (root == NULL) {
        root = (TreeNode*) malloc(sizeof(TreeNode));
        root->data = x;
        root->left = root->right = NULL;
        root->flag = 0;
        return root;
    }
    if (x < root->data) {
        root->left = insertTree(root->left, x);
    } else  {
        root->right = insertTree(root->right, x);
    }
    return root;
}

Tree createTree(int n) {
    TreeNode* root = NULL;
    for (int i=0; i<n; i++) {
        int v;
        scanf("%d", &v);
        root = insertTree(root, v);
    }
    return root;
}

void preorderTraversal(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    printf("%d ", root->data);
    preorderTraversal(root->left);
    preorderTraversal(root->right);
}

void resetTree(TreeNode* root) {
    root->flag = 0;
    if(root->left) {
        resetTree(root->left);
    }
    if(root->right) {
        resetTree(root->right);
    }
}

void freeTree(TreeNode* root) {
    if(root->left) {
        freeTree(root->left);
    }
    if(root->right) {
        freeTree(root->right);
    }
    free(root);
}

int check(TreeNode* root, int v) {
    if (root->flag) {
        // 1-出现过
        if (v < root->data) {
            return check(root->left, v);
        } else if (v > root->data) {
            return check(root->right, v);
        } else {
            return 0;
        }
    } else {
        // 0-未出现过
        if (v == root->data) {
            // 相等，出现了
            root->flag = 1;
            return 1;
        } else {
            return 0;
        }
    }
}

int judge(TreeNode* root, int n) {
    int v;
    int success = 1; //1-目前还一致，0-已经不一致了
    scanf("%d", &v);
    if (v != root->data) {
        success = 0;
    } else {
        root->flag = 1;
    }
    for (int i=1; i<n; i++) {
        scanf("%d", &v);
        if (success && !check(root, v)) {
            success = 0;
        }
    }
    return success;
}